Techniques for generating and storing a “snapshot” or “checkpoint” of the state of a virtual machine (VM) allows the operation of the VM to be resumed at a later time from the point in time at which the snapshot or checkpoint was taken. Example uses for checkpointing includes providing a backup of some aspect of a computer system and providing the ability to revert back to a previously generated checkpoint to undo changes to some aspect of a computer system or to recover from a failure affecting the computer system.
Fast and frequent checkpointing of virtual machines may be desirable for a number of applications. For example, continuous checkpointing allows users to revert back their application to almost any previous point in time. Reverse debugging based on deterministic replay also requires frequent checkpoints to reduce the amount of replay from a previous checkpoint that is required to execute backwards. Fast checkpoints can enable the possibility of speeding up an application by allowing speculative calculations that can be reverted if necessary. Furthermore, fast checkpoints may provide a way of providing fault tolerance, especially in cases of symmetric multiprocessing (SMP) virtual machines.